package com.yzjs.common.util.check;

import com.yzjs.common.exception.GlobalParamterException;
import org.apache.http.util.TextUtils;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AssertUtil {

    private static void throwException(String msg) {
        throw new GlobalParamterException(msg);
    }

    public static void isMoney(Double money, String msg) {
        if (null == money || 9.99999999E8D <= money.doubleValue() || money.doubleValue() <= 0.0D)
            throwException(msg);
    }

    public static void isTrue(boolean isTrue, String msg) {
        if (isTrue)
            throwException(msg);
    }

    public static void isFalse(boolean isFalse, String msg) {
        if (!isFalse)
            throwException(msg);
    }

    public static void isLessThan(Double val, Double compareVal, String msg) {
        if (val == null || val.doubleValue() < compareVal.doubleValue())
            throwException(msg);
    }

    public static void isLessThan(Long val, Long compareVal, String msg) {
        if (val == null || val.longValue() < compareVal.longValue())
            throwException(msg);
    }

    public static void isLessThan(Integer val, Integer compareVal, String msg) {
        if (val == null || val.intValue() < compareVal.intValue())
            throwException(msg);
    }

    public static void isLessThan(BigDecimal val, BigDecimal compareVal, String msg) {
        if (val == null || val.compareTo(compareVal) < 0)
            throwException(msg);
    }

    public static void isNull(Object obj, String msg) {
        if (obj == null)
            throwException(msg);
    }

    public static void isNotNull(Object obj, String msg) {
        if (obj != null)
            throwException(msg);
    }

    public static void isEmpty(String str, String msg) {
        if (str == null || str.trim().isEmpty())
            throwException(msg);
    }

    public static void isNotEmpty(String str, String msg) {
        if (str != null && !str.trim().isEmpty())
            throwException(msg);
    }

    public static void isEmpty(Collection<?> coll, String msg) {
        if (coll == null || coll.isEmpty())
            throwException(msg);
    }

    public static void isNotEmpty(Collection<?> coll, String msg) {
        if (coll != null && !coll.isEmpty())
            throwException(msg);
    }

    public static void isEmpty(Object[] array, String msg) {
        if (array == null || array.length == 0)
            throwException(msg);
    }

    public static void isNotEmpty(Object[] array, String msg) {
        if (array != null && array.length != 0)
            throwException(msg);
    }

    public static void isEmpty(Map<?, ?> map, String msg) {
        if (map == null || map.isEmpty())
            throwException(msg);
    }

    public static void isNotEmpty(Map<?, ?> map, String msg) {
        if (map != null && !map.isEmpty())
            throwException(msg);
    }

    /**
     * @param phone 需要认证的手机号码字符串
     * @return 验证通过返回true
     */
    public static void isMobile(String phone,String msg) {
        if (TextUtils.isEmpty(phone)) {
            throwException(msg);
        }
        String regex = "^[1][2-9][0-9]{9}$";
        match(regex, phone,msg);

    }




    /**
     * 验证邮箱
     *
     * @param str
     * @return 如果是符合的字符串,返回 <b>true </b>,否则为 <b>false </b>
     */
    public static void isEmail(String str,String msg) {
        String regex = "^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
         match(regex, str,msg);
    }

    /**
     * 验证输入邮政编号
     *
     * @param str
     * @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false </b>
     */
    public static void isPostalcode(String str,String msg) {
        String regex = "^\\d{6}$";
         match(regex, str,msg);
    }

    /**
     * 验证输入证号
     *
     * @param str
     * @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false </b>
     */
    public static void isIDcard(String str,String msg) {
        String regex = "(^\\d{18}$)|(^\\d{15}$)";
         match(regex, str,msg);
    }

    private static void match(String regex, String str,String message) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        if(!matcher.matches())
            throwException(message);
    }
}
